// 第七题， 说说什么是浅拷贝和深拷贝

// 1。 浅拷贝是值的传递，也可以理解为指针复制，因为两者指向的是同一块内存空间，修改原有的值，其他的也会改变。
let arr1 = [1, 2, 3]
let arr2 = arr1
arr1[0] = 10
console.log(arr1, arr2)


// 2. 深拷贝： 拷贝对象各个层级的属性。简单的讲，就是复制出来的每个对象都有属于自己的内存空间，不会互相干扰。
// 简单的实现深拷贝拷贝方法
let ary1 = [1, 2, 3]
let ary2 = JSON.parse(JSON.stringify(ary1))
ary1[0] = 100
console.log(ary1, ary2)

// 自己简单实现
function deepCopy(data) {
    const t = typeOf(data);
    let o;
    
    if (t === 'array') {
        o = [];
        for (let i = 0; i < data.length; i++) {
            o.push(deepCopy(data[i]));
        }
    } else if ( t === 'object') {
        o = {};
        for (let i in data) {
            o[i] = deepCopy(data[i]);
        }
    } else{
        return data;
    }

    return o;
}
// 更复杂的需要考虑数据类型，方法，时间，map， set等等。